﻿#region 참조 네임스페이스

using Skying.Drawing;
using System;
using System.Drawing;
using System.Drawing.Imaging;
using System.IO;
using System.Windows.Forms;

#endregion

namespace ScreenCapture
{
	public partial class MainForm : Form
	{
		#region 생성자/소멸자

		public MainForm()
		{
			this.InitializeComponent();
		}

		#endregion

		#region 상태바

		/// <summary>
		/// 캡쳐가 완료되는데 소요된 경과 시간을 상태바에 표시한다.
		/// </summary>
		/// <param name="time">캡쳐가 완료되는데 소요된 경과 시간을 밀리초 단위로 설정한다.</param>
		private void DisplayElapsedTime(int time)
		{
			this.ElapsedTimeStripStatusLabel.Text = string.Format("Elapsed Time : {0}ms", time);
		}

		#endregion

		#region 버튼 이벤트

		/// <summary>
		/// All Screen Capture 버튼이 클릭됐을 때 발생하는 이벤트를 구현한다.
		/// </summary>
		/// <param name="sender"></param>
		/// <param name="e"></param>
		private void AllScreenCaptureButton_Click(object sender, EventArgs e)
		{
			DateTime startTime = DateTime.Now;

			Stream stream = ScreenCapturing.CaptureAllToStream(ImageFormat.Bmp, 0.5f);

			DateTime endTime = DateTime.Now;

			TimeSpan elapsedTimeSpan = endTime - startTime;

			this.DisplayElapsedTime(elapsedTimeSpan.Milliseconds);

			try
			{
				this.CapturedPictureBox.Image = new Bitmap(stream);
			}
			catch (Exception error)
			{
				Console.WriteLine(error.Message);
			}
			finally
			{
				stream.Close();
			}
		}

		/// <summary>
		/// All Screen Save 버튼이 클릭됐을 때 발생하는 이벤트를 구현한다.
		/// </summary>
		/// <param name="sender"></param>
		/// <param name="e"></param>
		private void AllScreenSaveButton_Click(object sender, EventArgs e)
		{
			try
			{
				OpenFileDialog dialog = new OpenFileDialog() { CheckFileExists = false };

				if (dialog.ShowDialog(this) == DialogResult.OK)
				{
					DateTime startTime = DateTime.Now;

					ScreenCapturing.CaptureAllToFile(dialog.FileName, ImageFormat.Bmp);

					DateTime endTime = DateTime.Now;

					TimeSpan elapsedTimeSpan = endTime - startTime;

					this.DisplayElapsedTime(elapsedTimeSpan.Milliseconds);
				}
			}
			catch (Exception error)
			{
				Console.WriteLine(error.Message);
			}
		}

		/// <summary>
		/// All Screen To Clipboard 버튼이 클릭됐을 때 발생하는 이벤트를 구현한다.
		/// </summary>
		/// <param name="sender"></param>
		/// <param name="e"></param>
		private void AllScreenToClipboardButton_Click(object sender, EventArgs e)
		{
			DateTime startTime = DateTime.Now;

			ScreenCapturing.CaptureAllToClipboard();

			DateTime endTime = DateTime.Now;

			TimeSpan elapsedTimeSpan = endTime - startTime;

			this.DisplayElapsedTime(elapsedTimeSpan.Milliseconds);

			this.CapturedPictureBox.Image = Clipboard.GetImage();
		}

		#endregion
	}
}